Shiny 应用开发教程
1. 概述
Shiny 是 R 语言中用于创建交互式网页应用的强大工具。通过 Shiny,你可以将 R 代码转换为动态的、用户友好的网页应用,无需深入了解 HTML、CSS 或 JavaScript。本教程将带你从零开始,逐步掌握 Shiny 应用的开发。
2. 安装 Shiny 包
在开始之前,确保你已经安装了 R 和 RStudio。然后,安装 Shiny 包:
install.packages("shiny")
安装完成后,加载 Shiny 包:
library(shiny)
3. Shiny 应用的基本结构
一个 Shiny 应用由两个主要部分组成:ui(用户界面)和 server(服务器逻辑)。ui 负责定义应用的外观,而 server 则处理数据和计算。
3.1 UI 部分
UI 部分定义了应用的布局和控件。以下是一个简单的 UI 示例:
ui <- fluidPage(
titlePanel("我的第一个 Shiny 应用"),
sidebarLayout(
sidebarPanel(
sliderInput("obs", "选择观察数量:", min = 1, max = 100, value = 50)
),
mainPanel(
plotOutput("distPlot")
)
)
)
3.2 Server 部分
Server 部分处理用户输入并生成输出。以下是一个简单的 Server 示例:
server <- function(input, output) {
output$distPlot <- renderPlot({
hist(rnorm(input$obs), col = 'darkgray', border = 'white')
})
}
3.3 运行 Shiny 应用
将 UI 和 Server 部分组合在一起,并运行应用:
shinyApp(ui = ui, server = server)
4. 控件和输出
Shiny 提供了多种控件(如滑块、选择框、文本输入等)和输出(如图表、表格、文本等)。以下是一些常用的控件和输出示例。
4.1 滑块控件
sliderInput("slider", "选择一个值:", min = 0, max = 100, value = 50)
4.2 选择框控件
selectInput("select", "选择一个选项:", choices = c("A", "B", "C"))
4.3 图表输出
plotOutput("myPlot")
4.4 表格输出
tableOutput("myTable")
5. 实践练习
5.1 练习 1:创建一个简单的 Shiny 应用
目标:创建一个 Shiny 应用,用户可以通过滑块选择一个数值,应用将显示该数值的平方。
ui <- fluidPage(
titlePanel("平方计算器"),
sidebarLayout(
sidebarPanel(
sliderInput("number", "选择一个数值:", min = 0, max = 100, value = 50)
),
mainPanel(
textOutput("squareOutput")
)
)
)
server <- function(input, output) {
output$squareOutput <- renderText({
paste("你选择的数值的平方是:", input$number^2)
})
}
shinyApp(ui = ui, server = server)
5.2 练习 2:创建一个数据可视化应用
目标:创建一个 Shiny 应用,用户可以选择一个数据集(如 mtcars),并选择一个变量进行可视化。
ui <- fluidPage(
titlePanel("数据可视化"),
sidebarLayout(
sidebarPanel(
selectInput("dataset", "选择数据集:", choices = c("mtcars", "iris")),
selectInput("variable", "选择变量:", choices = NULL)
),
mainPanel(
plotOutput("plot")
)
)
)
server <- function(input, output, session) {
datasetInput <- reactive({
switch(input$dataset,
"mtcars" = mtcars,
"iris" = iris)
})
observe({
updateSelectInput(session, "variable", choices = names(datasetInput()))
})
output$plot <- renderPlot({
data <- datasetInput()
var <- input$variable
plot(data[[var]], main = paste("Plot of", var))
})
}
shinyApp(ui = ui, server = server)
6. 部署 Shiny 应用
你可以将 Shiny 应用部署到 ShinyApps.io 或使用 Shiny Server 进行本地部署。以下是部署到 ShinyApps.io 的步骤:
-
注册 ShinyApps.io 账户。
-
安装
rsconnect包:install.packages("rsconnect") -
配置账户:
rsconnect::setAccountInfo(name='yourname', token='yourtoken', secret='yoursecret') -
部署应用:
library(rsconnect) deployApp()
7. 总结
通过本教程,你已经掌握了 Shiny 应用开发的基本概念和步骤。Shiny 提供了丰富的控件和输出选项,使你能够创建功能强大的交互式应用。继续探索 Shiny 的更多功能,如动态 UI、响应式设计、自定义主题等,进一步提升你的应用开发技能。
8. 进一步学习资源
希望本教程对你有所帮助,祝你在 Shiny 应用开发的道路上取得成功!